home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
More Source
/
C⁄C++
/
Kant Generator Pro 1.2
/
src
/
kode ƒ
/
kant load-save.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-07
|
3KB
|
136 lines
#include <Script.h>
#include "error.h"
#include "kant load-save.h"
#include "kant main window.h"
#include "kant.h"
#include "file interface.h"
#include "text twiddling.h"
#include "dialogs.h"
#include "environment.h"
#include "util.h"
#include "graphics.h"
#include "window layer.h"
#include "program globals.h"
void LoadSaveDispatch(Boolean isLoad, Boolean useOldFile)
{
FSSpec saveFile;
Boolean alreadyExists;
enum ErrorTypes theError;
WindowPtr mainWindowPtr;
if ((!isLoad) && ((mainWindowPtr=GetIndWindowPtr(kMainWindow))==0L))
return;
if (isLoad)
{
if (GetSourceFile(&saveFile, SAVE_TYPE))
{
theError=GetTheFile(&saveFile);
if (theError!=noErr)
HandleError(theError, FALSE, FALSE);
}
}
else
{
saveFile=GetWindowFS(mainWindowPtr);
useOldFile=useOldFile&&(saveFile.name[0]!=0x00);
if (!useOldFile)
{
if (!GetDestFile(&saveFile, &alreadyExists, "\pSave document as..."))
return;
}
theError=SaveTheFile(saveFile, alreadyExists);
if (theError!=noErr)
HandleError(theError, FALSE, FALSE);
}
}
enum ErrorTypes SaveTheFile(FSSpec saveFile, Boolean alreadyExists)
{
OSErr theError;
short thisFile;
long count;
TEHandle hTE;
WindowPtr theWindow;
theError=noErr;
if (!alreadyExists)
{
theError=FSpCreate(&saveFile, CREATOR, SAVE_TYPE, smSystemScript);
FlushVol(0L, saveFile.vRefNum);
}
if (theError!=noErr)
return kCantCreateFile;
FSpCreate(&saveFile, CREATOR, SAVE_TYPE, smSystemScript);
theError=FSpOpenDF(&saveFile, fsRdWrPerm, &thisFile);
if (theError!=noErr)
return kCantOpenFileToSave;
theWindow=GetIndWindowPtr(kMainWindow);
hTE=GetWindowTE(theWindow);
count=(**hTE).teLength;
theError=SetEOF(thisFile, count);
if (theError!=noErr)
{
FSClose(thisFile);
return kDiskFull;
}
SetFPos(thisFile, 1, 0L);
theError=FSWrite(thisFile, &count, *((**hTE).hText));
FSClose(thisFile);
FlushVol(0L, saveFile.vRefNum);
if (theError!=noErr)
{
saveFile.name[0]=0x00;
return kCantWriteFile;
}
SetWTitle(theWindow, saveFile.name);
SetWindowTitle(theWindow, saveFile.name);
SetWindowFS(theWindow, saveFile);
SetWindowIsModified(theWindow, FALSE);
return allsWell;
}
enum ErrorTypes GetTheFile(FSSpec *saveFile)
{
short thisFile;
long count;
OSErr theError;
Ptr data;
WindowPtr theWindow;
theError=FSpOpenDF(saveFile, fsRdPerm, &thisFile);
if (theError!=noErr)
return kCantOpenFileToLoad;
GetEOF(thisFile, &count);
data=NewPtr(count);
SetFPos(thisFile, 1, 0L);
theError=FSRead(thisFile, &count, data);
FSClose(thisFile);
if (theError!=noErr)
return kCantLoadFile;
SetMainWindowTitle(saveFile->name);
OpenTheIndWindow(kMainWindow);
theWindow=GetIndWindowPtr(kMainWindow);
SetTheText(theWindow, data, count);
SetWindowFS(theWindow, *saveFile);
SetWindowIsModified(theWindow, FALSE);
DisposePtr(data);
return allsWell;
}